<?php
/**
 * Implemente une page html
 */
class BphHtml extends BphItemBox{
	/**
	 * Le bloc head de la page
	 */
	protected $_head;
	
	/**
	 * Le bloc body de la page
	 */
	public $body;
	
	/**
	 * Le titre de la page
	 */
	public $title ='';
	
	/**
	 * L'auteur de la page
	 */
	public $author ='';
	
	/**
	 * Les pages css à ajouter
	 */
	protected $_tab_css = Array();
	
	/**
	 * Les scripts a ajouter
	 */
	protected $_tab_scripts = Array();
	
	/**
	 * Le time stamp du début du script
	 */
	protected $_timescript;
	
	/**
	 * Le time stamp du début du rendu
	 */
	protected $_timeprint;

	/**
	 * Constructeur de la classe
	 * @param float	$ptime_script	le time stamp du début du script
	 */
	function __Construct($ptitle, $ptime_script=0){
		$this->title = $ptitle;
		$this->_timescript = ($ptime_script===0)? microtime(true): $ptime_script;
		$this->body = new BphItemBox('body');
		$this->_head = new BphItemBox('head');
		parent::__Construct('html');
	}
	
	/**
	 * Ajout d'items au body
	 */
	function AddItems (){
		return $this->body->AddItems(func_get_args());
	}	

	/**
	 * Ajout d'un lien vers une feuille css
	 */
	public function AddCss($file, $media='all'){
		$css = new BphItem('link');
		$css->AddAttribut('rel', 'stylesheet');
		$css->AddAttribut('type', 'text/css');
		$css->AddAttribut('href', $file);
		$css->AddAttribut('media', $media);
		$this->_tab_css[] = $css;
	}
	
	/**
	 * Ajout d'un lien vers un script javascript
	 */
	public function AddScript($file){
		$script = new BphItemBox('script');
		$script->AddAttribut('type', 'text/javascript');
		$script->AddAttribut('src', $file);
		$this->_tab_scripts[] = $script;
	}
	
	/**
	 * Prepare le HEAD de la page
	 */
	public function FillHead() {
		// Ajout du charset
		$charset = new BphItem('meta');
		$charset->AddAttribut('charset', 'utf-8');
		$this->_head->AddItems($charset);
		// Ajout du author
		if ( $this->author ){
			$author = new BphItem('meta');
			$author->AddAttribut('name', 'author');
			$author->AddAttribut('content', $this->author);
			$this->_head->AddItems($author);
		}
		// Ajout du titre
		if ( $this->title ){
			$title = new BphItemBox('title');
			$title->raw = TRUE;
			$title->AddItems($this->title);
			$this->_head->AddItems($title);
		}
		// Ajout des styles css
		foreach($this->_tab_css as $css)
			$this->_head->AddItems($css);
		// Ajout des scripts
		foreach($this->_tab_scripts as $script)
			$this->_head->AddItems($script);		
	}
	
	/**
	 * Renvoie le code de la page
	 */
	public function Code () {
		// Memorisation du debut du rendu
		$this->_timeprint = microtime(true);
		// Ajout du head
		$this->FillHead();
		parent::AddItems($this->_head);
		// Ajout du body
		parent::AddItems($this->body);
		$code = parent::Code();
		// Calcul du temps d'execution
		$time_end = microtime(true);
		$time = "<!--".round($time_end - $this->_timeprint, 4)."s (".
				round($time_end - $this->_timescript, 4)."s)-->";
		// Renvoi du code
		return "<!DOCTYPE html>\n".$code.$time;
	}
}
?>
